package com.five.monkey.feign.es.controller;

import com.five.monkey.feign.es.service.CardElasticsearchService;
import com.five.monkey.vo.CardVo;
import com.five.monkey.vo.CommonVo;
import com.five.monkey.vo.PageVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author 狻猊
 * @date 2022-03-29 16:00:02
 */
@RestController
@RequestMapping("/es/card")
public class ESCardController {

    @Autowired
    private CardElasticsearchService cardElasticsearchService;

    @PostMapping("/create/index")
    public CommonVo<Boolean> createIndex() {
        return CommonVo.ok(cardElasticsearchService.createIndex());
    }

    /**
     * 保存（新增或修改）卡片信息
     * @author 狻猊
     * @param cardVo 卡片信息
     * @return com.five.monkey.vo.CommonVo<com.five.monkey.vo.CardVo>
     * @date 2022/3/29 3:58 下午
     */
    @PostMapping("/save")
    public CommonVo<CardVo> save(@RequestBody CardVo cardVo) {
        return CommonVo.ok(cardElasticsearchService.save(cardVo));
    }

    /**
     * 批量保存（新增或修改）卡片信息
     * @author 狻猊
     * @param cardVoList 卡片信息集合
     * @return com.five.monkey.vo.CommonVo<java.util.List<com.five.monkey.vo.CardVo>>
     * @date 2022/3/31 4:33 下午
     */
    @PostMapping("/batch/save")
    public CommonVo<List<CardVo>> batchSave(@RequestBody List<CardVo> cardVoList) {
        return CommonVo.ok(cardElasticsearchService.batchSave(cardVoList));
    }

    /**
     * 根据content查询卡片信息，按照创建时间倒序分页
     * @author 狻猊
     * @param content 搜索关键词
     * @param pageNum 页码，从1开始
     * @param pageSize 页面大小
     * @return com.five.monkey.vo.CommonVo<com.five.monkey.vo.PageVo<com.five.monkey.vo.CardVo>>
     * @date 2022/3/29 3:53 下午
     */
    @GetMapping("/page/by/content")
    public CommonVo<PageVo<CardVo>> pageByContent(@RequestParam("content") String content,
                                                  @RequestParam(value = "pageNum", required = false, defaultValue = "1") int pageNum,
                                                  @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize) {
        // jpa的分页是从0页码开始的
        return CommonVo.ok(cardElasticsearchService.findByContent(content, pageNum - 1, pageSize));
    }

    /**
     * 根据content查询卡片信息
     * @author 狻猊
     * @param content 搜索关键词
     * @return com.five.monkey.vo.CommonVo<java.util.List<com.five.monkey.vo.CardVo>>
     * @date 2022/3/30 12:05 下午
     */
    @GetMapping("/find/By/content")
    public CommonVo<List<CardVo>> findByContent(@RequestParam("content") String content) {
        return CommonVo.ok(cardElasticsearchService.findByContent(content));
    }

    /**
     * 根据title模糊查询卡片信息
     * @author 狻猊
     * @param title 卡片标题
     * @return com.five.monkey.vo.CommonVo<java.util.List<com.five.monkey.vo.CardVo>>
     * @date 2022/3/30 12:05 下午
     */
    @GetMapping("/find/By/title")
    public CommonVo<List<CardVo>> findByTitle(@RequestParam("title") String title) {
        return CommonVo.ok(cardElasticsearchService.findByTitle(title));
    }

    /**
     * 根据title全等查询卡片信息
     * @author 狻猊
     * @param title 卡片标题
     * @return com.five.monkey.vo.CommonVo<java.util.List<com.five.monkey.vo.CardVo>>
     * @date 2022/3/30 12:05 下午
     */
    @GetMapping("/find/By/title/equals")
    public CommonVo<List<CardVo>> findByTitleEquals(@RequestParam("title") String title) {
        return CommonVo.ok(cardElasticsearchService.findByTitleEquals(title));
    }

    /**
     * 根据status查询卡片信息
     * @author 狻猊
     * @param status 卡片状态
     * @return com.five.monkey.vo.CommonVo<java.util.List<com.five.monkey.vo.CardVo>>
     * @date 2022/3/30 12:05 下午
     */
    @GetMapping("/find/By/status")
    public CommonVo<List<CardVo>> findByStatus(@RequestParam("status") int status) {
        return CommonVo.ok(cardElasticsearchService.findByStatus(status));
    }

    /**
     * 根据adminId查询卡片信息
     * @author 狻猊
     * @param adminId 卡片创建人id
     * @return com.five.monkey.vo.CommonVo<java.util.List<com.five.monkey.vo.CardVo>>
     * @date 2022/3/30 12:05 下午
     */
    @GetMapping("/find/By/adminId")
    public CommonVo<List<CardVo>> findByAdminId(@RequestParam("adminId") Long adminId) {
        return CommonVo.ok(cardElasticsearchService.findByAdminId(adminId));
    }

    /**
     * 根据id查询卡片信息
     * @author 狻猊
     * @param id 卡片id
     * @return com.five.monkey.vo.CommonVo<com.five.monkey.vo.CardVo>
     * @date 2022/3/30 12:05 下午
     */
    @GetMapping("/find/By/id")
    public CommonVo<CardVo> findById(@RequestParam("id") Long id) {
        return CommonVo.ok(cardElasticsearchService.findById(id));
    }
}
